package main

import (
	"context"
	"fmt"
	"goseckill/backend/controllers"
	"goseckill/common"
	"goseckill/dao"
	"goseckill/models"
	"goseckill/service"
	"log"

	"github.com/kataras/iris/v12"
	"github.com/kataras/iris/v12/mvc"
)

func main() {
	// 链接数据库
	db, err := common.NewMySQLConn()
	if err!=nil {
		log.Fatal(err)  // 打印错误并退出
	}
	fmt.Println(db.Stats().OpenConnections)
	// 使用gorm链接数据库，并实现自动迁移
	gormDB,err := common.NewGormMysqlConn()
	if err!=nil{log.Fatal(err)}
	// 实现自动迁移 更新数据库表  自动创建
	gormDB.AutoMigrate(&models.Message{}, &models.Order{},&models.Product{},&models.User{})

	// iris基本设置
	// 参照文档
	app := iris.New()   // 创建iris实例
	//设置模式
	app.Logger().SetLevel("debug")

	// 路由设置
	app.Get("/", func(ctx iris.Context){
		fmt.Println("hello world")
		ctx.Write([]byte("hello world"))
	})
	// app.Run(iris.Addr(":8888"))

	// 具体的路由设置可以放到一个专门的文件中处理
	// 不过这里比较简单，就这样的吧
	// .Party 用于分组路由

	ctx,cancel := context.WithCancel(context.Background())
	defer cancel()    
	// // 用户的路由及controller
	// userDao := dao.NewUserDao("users", db)
	// userService := service.NewUserService(userDao)
	// userParty := app.Party("/user")

	// 商品的
	productDao := dao.NewProductManager("products",db)
	productService := service.NewProductService(productDao)
	// 注册分组路由
	productPartyRouter := app.Party("/product")
	// 使用iris mvc框架
	// mvc.Configure(app.Party("/root"), myMVC)   // 官网示例
	productMVC := mvc.New(productPartyRouter)
	// 注册
	productMVC.Register(ctx, productService)
	// control
	// Handle()为当前mvc提供controller
	productMVC.Handle(new(controllers.ProductController))

	// 订单的
	orderDao := dao.NewOrderDao("orders",db)
	orderService := service.NewOrderService(orderDao)
	orderPartyRouter := app.Party("orders")
	orderMVC := mvc.New(orderPartyRouter)
	orderMVC.Register(ctx, orderService)
	// 绑定controller




	app.Run(iris.Addr(":8888"))
}